home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 1 / ETO Development Tools 1.iso / Essentials / Developer Essentials Jul 90 / Programming / MPW Dynamo 3.0 / app.builder / dispatch.a < prev    next >
Encoding:
Text File  |  1990-03-17  |  4.6 KB  |  251 lines  |  [TEXT/MPS ]

  1. ****************************************************************
  2. *                            *
  3. * buildapp.system hub.                    *
  4. *                            *
  5. * Apple II 8-bit application builder and launcher.        *
  6. * Copyright (C) 1990 Apple Computer.            *
  7. * Version 3.0                        *
  8. *                            *
  9. * Written by Eric Soldan, Apple II DTS            *
  10. *                            *
  11. ****************************************************************
  12.  
  13.         case    on
  14.         longi    off
  15.         longa    off
  16.         machine    m6502
  17.  
  18. * asmiigs dispatch.a -o :o:dispatch.obj
  19. * linkiigs -x :o:dispatch.obj -o :o:dispatch.lnk
  20. * makebiniigs :o:dispatch.lnk -o :o:dispatch.bin -org $2000
  21. * duplicateiigs -y -mac :o:dispatch.bin :
  22.  
  23. *** (mode bit assignments) **
  24.  
  25. * bit 0 = 0:  User wants ROM active
  26. * bit 0 = 1:  User wants a language card active
  27.  
  28. * bit 1 = 0:  Primary zero-page and language card (if bit 0 says language card)
  29. * bit 1 = 1:  Auxiliary zero-page and language card (if bit 0 says language card)
  30.  
  31. * bit 2 = 0:  Primary $D000 bank of language card (if bit 0 says language card)
  32. * bit 2 = 1:  Auxiliary $D000 bank of language card (if bit 0 says language card)
  33.  
  34. * bit 3 = 0:  Primary 48k
  35. * bit 3 = 1:  Auxiliary 48k
  36.  
  37. * bit 4 = 0:  Initialize aux stack pointer (stored at $101) to $FF
  38. * bit 4 = 1:  Leave aux stack pointer alone (already set up).
  39.  
  40. * bit 7 = 0:  Mode byte is for a segment.
  41. * bit 7 = 1:  Mode byte is for launching.
  42.  
  43. *****************************
  44.  
  45. mode        equ    $62
  46. dest        equ    $63        ;& $64
  47. len        equ    $65        ;& $66
  48. ptr        equ    $9D        ;& $9E
  49. objlen        equ    $9F        ;& $A0
  50.  
  51. off        equ    0
  52. on        equ    1
  53.  
  54. store80        equ    $C000        ;sta
  55. ramrd        equ    $C002        ;sta
  56. ramrdsw        equ    $C013        ;hi=1, aux48
  57. ramwrt        equ    $C004        ;sta
  58. ramwrtsw        equ    $C014        ;hi=1, aux48
  59. altzp        equ    $C008        ;sta
  60. rdaltzp        equ    $C016
  61. pri        equ    $C054        ;page1
  62. aux        equ    $C055        ;page2
  63.  
  64.  
  65. * second read from switch does writing.
  66. rdlans        equ    $C080        ;read lan-card, sec-$d0 bank,
  67. *                    ;write rom (lan-card protect)
  68. wrlans        equ    $C081        ;write lan-card, sec-$D0
  69. *                    ;bank, read rom.
  70. romsel        equ    $C082        ;read/write rom.
  71. rdwrlans        equ    $C083        ;read/write lan-card,
  72. *                    ;sec-$D0 bank.
  73. * $C084-$C087 duplicates of above.
  74. rdlanp        equ    rdlans+8        ;pri-$D0 bank.
  75. wrlanp        equ    wrlans+8        ;pri-$D0 bank.
  76. rdwrlanp        equ    rdwrlans+8    ;pri-$D0 bank.
  77.  
  78.  
  79. *************************
  80.  
  81. start        PROC
  82.  
  83.         jmp    start0
  84.         dc.b    $EE,$EE
  85.         dc.b    65
  86.         dc.b    13,'BUILDAPP.TEXT'
  87.         ds.b    65-14
  88.  
  89.         dc.w    end
  90.  
  91. start0        lda    end        ;First mode byte.
  92.         and    #16
  93.         bne    @a
  94.  
  95.         php            ;Disable interrupts.
  96.         sei
  97.  
  98.         sta    altzp+on        ;Initialize aux stack pointer.
  99.         ldx    #$FF
  100.         stx    $101
  101.         tsx            ;Store current stack pointer.
  102.         inx            ;Adjust for php.
  103.         stx    $100
  104.         sta    altzp+off    ;Back to primary ram.
  105.  
  106.         plp            ;Restore interrupt status.
  107.  
  108. @a        clc
  109.         jsr    selectzp
  110.  
  111.         bit    wrlans
  112.         bit    wrlans        ;Read rom/write ram.
  113.         sta    ramrd+off
  114.         sta    ramwrt+off
  115.         lda    #end
  116.         sta    ptr
  117.         lda    #>end
  118.         sta    ptr+1
  119.  
  120. movefile        ldy    #4
  121. @m        lda    (ptr),y
  122.         sta    |mode,y
  123.         dey
  124.         bpl    @m
  125.  
  126.         jsr    selbank
  127.         lda    mode
  128.         bpl    mfile
  129.         jmp    (dest)        ;Start it.
  130.  
  131. mfile        equ    *
  132.         lda    ptr
  133.         clc
  134.         adc    #5
  135.         sta    ptr
  136.         bcc    @a
  137.         inc    ptr+1
  138.  
  139. @a        ldy    #0
  140.         ldx    len        ;So dec test works.
  141.         inx
  142. @b        dex
  143.         bne    @c
  144.         dec    len+1
  145.         bmi    @d
  146. @c        lda    (ptr),y
  147.         sta    (dest),y
  148.         iny
  149.         bne    @b
  150.         inc    ptr+1
  151.         inc    dest+1
  152.         bne    @b
  153. @d        tya
  154.         clc
  155.         adc    ptr
  156.         sta    ptr
  157.         bcc    movefile
  158.         inc    ptr+1
  159.         bcs    movefile        ;Always.
  160.  
  161. *************************
  162.  
  163. selbank        lda    mode
  164.         and    #8
  165.         beq    @a
  166.         sta    $C005        ;Write aux48.
  167. @a        bit    romsel
  168.         lda    mode
  169.         lsr    a
  170.         bcc    @b        ;User wants rom selected.
  171.         lsr    a
  172.         jsr    selectzp        ;Select which 0page.
  173.         bit    rdwrlans        ;Read/write lan, sec $D0.
  174.         bit    rdwrlans
  175.         lda    mode
  176.         and    #4
  177.         beq    @b
  178.         bit    rdwrlanp        ;Read/write lan, pri $D0
  179.         bit    rdwrlanp
  180. @b        rts
  181.  
  182. *************************
  183.  
  184. selectzp        ror    a        ;cclear=pri / cset=alt
  185.         eor    rdaltzp
  186.         bpl    @rts        ;already have correct 0page.
  187.  
  188.         ldy    #4        ;Save the 0page we need.
  189. @a        lda    mode,y
  190.         sta    @mode,y
  191.         lda    ptr,y
  192.         sta    @ptr,y
  193.         dey
  194.         bpl    @a
  195.  
  196.         pla            ;First, save the return address, since
  197.         sta    @retaddr        ;it will end up on the wrong stack, and
  198.         pla            ;therefore we would not be able to return.
  199.         sta    @retaddr+1
  200.  
  201.         php            ;Switch which stack is being used.
  202.         pla
  203.         sta    @intstat
  204.  
  205.         tsx            ;What is that darned stack pointer anyway?
  206.         asl    rdaltzp        ;Which 0page are we on currently?
  207.  
  208.         sei            ;Now we are getting serious.
  209.         sta    altzp+on
  210.         bcc    @b        ;We were in pri-mem before.
  211.  
  212.         stx    $101        ;Save the current aux stack pointer, since
  213.         ldx    $100        ;we will be changing to pri-mem.  Then
  214.         sta    altzp+off    ;choose primary ram.
  215.         bcs    @c
  216.  
  217. @b        stx    $100
  218.         ldx    $101
  219.  
  220. @c        txs            ;Set the stack pointer
  221.         lda    @intstat
  222.         pha
  223.         plp            ;Now we can lighten up.
  224.  
  225.         lda    @retaddr+1    ;Show the way home.
  226.         pha
  227.         lda    @retaddr
  228.         pha
  229.  
  230.         ldy    #4        ;Save the 0page we need.
  231.         lda    @mode,y
  232.         sta    mode,y
  233.         lda    @ptr,y
  234.         sta    ptr,y
  235.         dey
  236.         bpl    @c
  237.  
  238. @rts        rts
  239.  
  240. @mode        ds.b    5
  241. @ptr        ds.b    5
  242. @retaddr        ds.b    2
  243. @intstat        ds.b    1
  244.  
  245. end        equ    *
  246.  
  247.         endp
  248.  
  249.         END
  250.  
  251.